package com.example.mysql.学习笔记.高级.数据库的优化之索引.InnoDB数据存储结构存储;

public class 存储结构之页 {
}

/**
 *索引结构给我们提供了高效的索引方式，
 * 不过索引信息以及数据记录都是保存在文件上的,确切说是存储在页结构中。
 * 另一方面，索引是在存储引擎中实现的，MySQL服务器.
 * 上的存储引擎负责对表中数据的读取和写入工作。
 * 不同存储弓|擎中存放的格式--般是不同的，
 * 甚至有的存储弓|擎比如Memory都不用磁盘来存储数据。
 *
 * 由于InnoDB是MySQL的默认存储引擎，所以本章剖析InnoDB存储引擎的数据存储结构。
 *
 * InnoDB将数据划分为若干个页，InnoDB中页的大小默认为16KB。
 * 以页作为磁盘和内存之间交互的基本单位，也就是一次最少从磁盘中读取16KB的内容到内存中，
 * 一次最少把内存中的16KB内容刷新到磁盘中。
 * 也就是说，在数据库中,不论读一行， 还是读多行，都是将这些行所在的页进行加载。
 * 也就是说，数据库管理存储空间的基本单位是页(Page)，数据库I/0操作的最小单位是页。
 * 一个页中可以存储多个行记录。
 *
 * 页结构概述
 * 页a、页b、页c ..页n这些页可以不在物理结构上相连，只要通过双向链表相关联即可。
 * 每个数据页中的记录会按照主键值从小到大的顺序组成一个单向链表,
 * 每个数据页都会为存储在它里边的记录生成一个页目录，
 * 在通过主键查找某条记录的时候可以在页目录中使用二分法快速定位到对应的槽,
 * 然后再遍历该槽对应分组中的记录即可快速找到指定的记录。
 *
 * InnoDB：
 *  很多行-》一页（16kb）
 *  64页-》一区（16*64=1MB）
 *  很多区-》一段
 *  很多段-》表空间
 *
 *  区(Extent) 是比页大一级的存储结构, 在InnoDB存储引擎中，
 *       一个区会分配64个连续的页。因为InnoDB中的页大小默认是16KB,
 *       所以一个区的大小是64*16KB= 1MB。
 *  段(Segment) 由一个或多个区组成，
 *      区在文件系统是一个连续分配的空间(在InnoDB中是连续的64个页)，
 *       不过在段中不要求区与区之间是相邻的。
 *       段是数据库中的分配单位，不同类型的数据库对象以不同的段形式存在。
 *       当我们创建数据表、索引的时候，就会相应创建对应的段，
 *       比如创建一张表时会创建一个表段, 创建一个索引时会创建一个索引段。
 * 表空间(Tablespace) 是一个逻辑容器，表空间存储的对象是段,
 * 在一个表空间中可以有一个或多个段， 但是一个段只能属于一个表空间。
 * 数据库由一个或多个表空间组成，
 * 表空间从管理上可以划分为 系统表空间、用户表空间、撤销表空间、临时表空间等。
 *
 *
 */
